package leetcode.code0089;

import java.util.ArrayList;
import java.util.List;

/**
 * 超时
 * @author CaoYu
 * @date 2021年10月15日
 * @description
 */
public class Solution1 extends Solution89 {

	@Override
	public List<Integer> grayCode(int n) {
		List<Integer> ans = new ArrayList<>();// 答案
		grayCode(0, n, ans);// 从0开始, n位数字, 使用记录, 答案
		return ans;
	}

	private void grayCode(int num, int n, List<Integer> ans) {
		if (ans.indexOf(num) != -1)// 出现过的不做
			return;
		else {
			ans.add(num);// 记录答案
		}
		for (int i = 0; i < n; i++) {
			int dif = 1 << i;// 所有位上, 尝试不同
			this.grayCode(num | dif, n, ans);
		}
	}

	public static void main(String[] args) {
		Solution1 so = new Solution1();
		so.debug1();
		so.debug2();
		so.debug3();
	}

}
